EXCEL

read_excel("ruta", sheet = 2)
  • sheet <- Nombre o Número de la hoja.
  • n_max <- Número amximo de renglones a leer.
  • na <- Formas alternativas a los NA
  • range <- Rango de deldas(“nombreHoja!B2:G14)
  • col_names <- Nombres posibles para las columnas
  • col_types <- Tipo de variables en las columnas
  • reim_ws <- Se deben recortar los espacios en blanco iniciales y finales.
  • skip <- Número mínimo de filas que se deben omitir antes de leer algo.

Ejemplo

library(readxl)
library(kableExtra)

dataset <- read_excel("../Bases de datos/Base salarios.xls", sheet = 2)
kable(head(dataset), "markdown")
ID empleado Apellido Nombre Seccional Facultad Cargo Salario Fch comienzo Fch nacimiento
1968 Burgos Jeronimo Palmira Administración Administrativo 10661-04-19 1982-04-05 1951-09-28
1674 Villegas Estefania Palmira Administración Docente 10661-04-19 1992-03-25 1964-01-17
1516 Fernandez Guillermo Palmira Administración Docente 14220-07-30 1985-03-06 1963-06-26
1330 Ramirez Eliana Palmira Administración Docente 10661-04-19 1989-02-14 1964-05-17
1657 Carmona Jose Palmira Administración Docente 10661-04-19 1987-12-06 1963-10-10
1573 De santis Marcela Palmira Administración Aux. Administrativo 6006-11-09 1988-07-07 1960-05-31

Nota: Tambien de pueden leer los links de bases de datos que se encuenten alojadas en un dirección en la web.

CSV

Los archivos CSV (del inglés comma-separated values) son un tipo de documento en formato abierto sencillo para representar datos en forma de tabla, en las que las columnas se separan por comas, en R utilizamos los siguientes códigos para trabajar con esta clase de fichero.

read.csv() ó read.csv2() si el archivo es separado con ;
  • sep=“,” <- Me permite indicar la separación entre columnas (, . )
  • dec=“,” <- Me permite indicar el separador decimal
  • col.names <- c(“name1”,“name2”,…) <- Me permite asignar nombres a las columnas
  • header <- por de.fecto TRUE, para indicar si la base de datos tiene cabecera
  • na.strings=“NA” <- Como están denotados los NA en las base de datos
  • stringAsFactor=F <- Por defecto T me permite ordenar a R que no convierta los string en factores

Ejemplo

auto <- read.csv("../Bases de datos/auto-mpg.csv", 
                 header = TRUE, sep = ",",
                 stringsAsFactors = FALSE)

kable(head(auto),format = "markdown")
No mpg cylinders displacement horsepower weight acceleration model_year car_name
1 28 4 140 90 2264 15.5 71 chevrolet vega 2300
2 19 3 70 97 2330 13.5 72 mazda rx2 coupe
3 36 4 107 75 2205 14.5 82 honda accord
4 28 4 97 92 2288 17.0 72 datsun 510 (sw)
5 21 6 199 90 2648 15.0 70 amc gremlin
6 23 4 115 95 2694 15.0 75 audi 100ls

XML

XML es un subconjunto de lenguajes de marcado estándar, simplificado y adaptado a Internet. Un lenguaje de marcado, es una forma de codificar un documento que junto con el texto incorpora etiquetas o marcas que contienen información adicional acerca de la estructura del texto o su presentación,en R utilizamos los siguientes códigos para trabajar con esta clase de fichero.

#Instalamos el paquete necesario
install.packages("XML")

#Cargamos la base de datos en un string llamado url
url <- "file.xml"

#Localizamos el archivo
XML <- xmlParse(url)#XMLInternalDocument

#Se obtiene todo lo que hay en el nodo raız del archivo XML
raiz <- xmlRoot(XML)

#Se crea un data frame con lo valores obtenidos
datos <- xmlSApply(raiz,function(x)xmlSApply(x,xmlValue))

#Creamos un nuevo data frame pero con los datos transpuestos
datos <- data.frame(t(datos),row.names = NULL)
  • xmlSAapply <- Devuelve una matriz de lo valores sobre cada uno de los valores de nodo raíz.
  • xmlValue <- Permite extraer la información de un nodo raı́z.
  • t <- Me permite transponer una matriz o un data frame
  • row.name = NULL <- Indico a R que las filas no tendrán nombres.

Ejemplo

Para leer bases de datos directamente de una página web se usa:

library(RCurl)
xData <- getURL("url")
library(XML)

url <- "../Bases de datos/cd_catalog.xml"

xmldoc <- xmlParse(url) 
rootnode <- xmlRoot(xmldoc)
rootnode[2]
## $CD
## <CD>
##   <TITLE>Hide your heart</TITLE>
##   <ARTIST>Bonnie Tyler</ARTIST>
##   <COUNTRY>UK</COUNTRY>
##   <COMPANY>CBS Records</COMPANY>
##   <PRICE>9.90</PRICE>
##   <YEAR>1988</YEAR>
## </CD> 
## 
## attr(,"class")
## [1] "XMLInternalNodeList" "XMLNodeList"
cds_data <- xmlSApply(rootnode, function(x) xmlSApply(x, xmlValue) )

kable(head(cds_data),"markdown")
CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD CD
TITLE Empire Burlesque Hide your heart Greatest Hits Still got the blues Eros One night only Sylvias Mother Maggie May Romanza When a man loves a woman Black angel 1999 Grammy Nominees For the good times Big Willie style Tupelo Honey Soulsville The very best of Stop Bridge of Spies Private Dancer Midt om natten Pavarotti Gala Concert The dock of the bay Picture book Red Unchain my heart
ARTIST Bob Dylan Bonnie Tyler Dolly Parton Gary Moore Eros Ramazzotti Bee Gees Dr.Hook Rod Stewart Andrea Bocelli Percy Sledge Savage Rose Many Kenny Rogers Will Smith Van Morrison Jorn Hoel Cat Stevens Sam Brown T’Pau Tina Turner Kim Larsen Luciano Pavarotti Otis Redding Simply Red The Communards Joe Cocker
COUNTRY USA UK USA UK EU UK UK UK EU USA EU USA UK USA UK Norway UK UK UK UK EU UK USA EU UK USA
COMPANY Columbia CBS Records RCA Virgin records BMG Polydor CBS Pickwick Polydor Atlantic Mega Grammy Mucik Master Columbia Polydor WEA Island A and M Siren Capitol Medley DECCA Stax Records Elektra London EMI
PRICE 10.90 9.90 9.90 10.20 9.90 10.90 8.10 8.50 10.80 8.70 10.90 10.20 8.70 9.90 8.20 7.90 8.90 8.90 7.90 8.90 7.80 9.90 7.90 7.20 7.80 8.20
YEAR 1985 1988 1982 1990 1997 1998 1973 1990 1996 1987 1995 1999 1995 1997 1971 1996 1990 1988 1987 1983 1983 1991 1968 1985 1987 1987
cds.catalog <- data.frame(t(cds_data), row.names = NULL)

kable(cds.catalog[1:5,],format = "markdown")
TITLE ARTIST COUNTRY COMPANY PRICE YEAR
Empire Burlesque Bob Dylan USA Columbia 10.90 1985
Hide your heart Bonnie Tyler UK CBS Records 9.90 1988
Greatest Hits Dolly Parton USA RCA 9.90 1982
Still got the blues Gary Moore UK Virgin records 10.20 1990
Eros Eros Ramazzotti EU BMG 9.90 1997

Nota: En ocasiones puede ser complicado extraer información de ficheros XML por lo que se recomienda el estudio de la sintaxis de Xpath.

HTML

Un chero HTML es un formato especializado de un chero XML, en R utilizamos los siguientes códigos para trabajar con esta clase de fichero.

#Cargamos el paquete necesario
library(XML)

#Cargamos el link de la pagina web en un string llamado url
url <- "www.pagina.com"

#Cargamos todas la tablas de la pagina web
tablas <- readHTMLTable(url)

Las tablas serán tomadas en R como lista compuesta por todas las tablas que hay almacenadas en la página web, por lo que debemos indicarle a R cuál de esas tablas es la que nos interesa.

library(XML)

#Indicamos a R cual es la tabla que nos interesa

tablas[[6]] #En este caso indicamos a R que queremos la tabla 6
tabla <- readHTMLTable(url,which = 6)
  • which = # <- Nos permite indicar cual tabla queremos

Ejemplo

population_url <- "../Bases de datos/WorldPopulation-wiki.htm"
tables <- readHTMLTable(population_url)

most_populated <- tables[[6]]
head(most_populated, 3)
##   Rank Country / Territory    Population              Date
## 1    1       China[note 4] 1,385,310,000 September 9, 2017
## 2    2               India 1,321,010,000 September 9, 2017
## 3    3       United States   325,732,000 September 9, 2017
##   Approx. % of world\r\npopulation Source
## 1                             18.3%   [91]
## 2                             17.5%   [92]
## 3                             4.31%   [93]
custom_table <- readHTMLTable(population_url, which = 6)
custom_table
##    Rank Country / Territory    Population              Date
## 1     1       China[note 4] 1,385,310,000 September 9, 2017
## 2     2               India 1,321,010,000 September 9, 2017
## 3     3       United States   325,732,000 September 9, 2017
## 4     4           Indonesia   261,600,000  October 31, 2016
## 5     5            Pakistan   208,848,000 September 9, 2017
## 6     6              Brazil   207,985,000 September 9, 2017
## 7     7             Nigeria   188,500,000  October 31, 2016
## 8     8          Bangladesh   163,106,000 September 9, 2017
## 9     9              Russia   146,773,226      June 1, 2017
## 10   10               Japan   126,750,000      July 1, 2017
##    Approx. % of world\r\npopulation Source
## 1                              18.3%   [91]
## 2                              17.5%   [92]
## 3                              4.31%   [93]
## 4                              3.46%   [94]
## 5                              2.76%   [95]
## 6                              2.75%   [96]
## 7                              2.49%   [97]
## 8                              2.16%   [98]
## 9                              1.94%   [99]
## 10                             1.68%  [100]

JSON

JSON acrónimo de JavaScript Object Notation, es un formato de texto ligero para el intercambio de datos, hoy en dı́a se considera la alternativa a XML. En R utilizamos los siguientes códigos para trabajar con esta clase de fichero.

#Instalamos el paquete necesario
install.packages("jsonlite")

#Cargamos el paquete necesario
library(jsonlite)

#la base de datos ó la dirección de la pagina web en un string llamado url
url <- "file.json" 

#Leemos la base de datos
base <- fromJSON(url)

#Como en html podemos almacenar un conjunto de data frame en un archivo json por lo que para acceder a el usamos
el siguiente código
base <- base$list$resources$resource$tabla

#Por ultimo, si queremos convertir un data frame en un archivo json podemos hacer lo siguiente
toJSON(data.frame)

Ejemplo

library(jsonlite)


dat.1 <- fromJSON("../Bases de datos/students.json")




url <- "http://www.floatrates.com/daily/usd.json"
currencies <- fromJSON(url)

currency.data <- currencies$eur
head(dat.1, 3)
##     id          Name            Email      Major year
## 1 1044   Fran Morton fran.m@quama.edu Statistics 2015
## 2 1035  Kato Mullins  tempor@giat.com  Marketing 2014
## 3 1046 Jordan Keller    Cum@gmail.com  Chemistry 2014
dat.1$Email
##  [1] "fran.m@quama.edu"     "tempor@giat.com"      "Cum@gmail.com"       
##  [4] "eu@famesacturpis.com" "Dea.Ortega@velit.ca"  "je@euismod.org"      
##  [7] "yoko@yahoo.co.uk"     "efarrella@gravid.com" "Delacruz@shu.edu"    
## [10] "mageehump@gmail.com"  "kcooper@hotmail.com"  "croy@yahoo.com"

Rdata y rds

Son estructuras de datos propias de R. Estos objetos tienen las ventajas que permiten guardarlos y enviarl objetos y procedimientos para que queden almacenados y puedan ser usados posteriormente.

clientes <- c("Juan","Pedro","Lucas")
fechas <- as.Date(c("2017-12-27","12-11-1","2018-1-1"))
pago <- c(315,192.55,40.15)
pedido <- data.frame(clientes,fechas,pago)

#Aguardando data frame tipo Rdata
save(pedido,file="../Bases de datos/Objeto1.Rdata") # Permite guardar mas de un archivo. 

#Guardando dataframe tipo rds
saveRDS(pedido,file="../Bases de datos/Objeto2.rds")

#Cargar objeto Rdata
load("../Bases de datos/Objeto1.Rdata")

#Cargar objeto RDS

objeto <- readRDS("../../../Bases de datos/base2.rds")

Nota: remove(Objeto) Permite remover elementos cargados para eliminar desgate de memoria.

Para guardar todos los objetos de una sección se usa:

save.image(file = "../carpeta/fichero.Rdata")

Archivos de texto

Se pueden leer tipos archivos de texto como libros o otros documentos.

archivo <- "../Bases de datos/texto.txt"
con <- file(archivo, open="r") # Abrimos la conexión
documento <- readLines(con)          # Leemos el contenido del archivo
## Warning in readLines(con): incomplete final line found on '../Bases de
## datos/texto.txt'
close(con)                           # Cerramos la conexión

str(documento)
##  chr [1:2] "Los archivos CSV (del inglés comma-separated values) son un tipo de documento en formato abierto sencillo para "| __truncated__ ...

Y para escribir un archivo de texto.

texto <- "Hola mundo"
con <- file("C:/carpeta/texto_ejemplo.txt", open="w")
documento <- writeLines(text = texto, con = con)
close(con)

Bases de datos grandes

Similar a read.tablepero más rápido y más conveniente. Todos los controles como sep, colClassesy nrowsson detectados automáticamente.

library(data.table)

fread(input, file, text, cmd, sep="auto", sep2="auto", dec=".", quote="\"",nrows=Inf, header="auto",
  na.strings=getOption("datatable.na.strings","NA"), 
  stringsAsFactors=FALSE, verbose=getOption("datatable.verbose", FALSE),
  skip="__auto__", select=NULL, drop=NULL, colClasses=NULL,
  col.names,
  check.names=FALSE, encoding="unknown",
  strip.white=TRUE, fill=FALSE, blank.lines.skip=FALSE,
  key=NULL, index=NULL)

Otras alternativas

# read.table

DF <- read.csv("base.csv",stringsAsFactors=FALSE)     

 
# read.table optimizado

DF <- read.table("base.csv",header=TRUE,sep=",",quote="", 
                  stringsAsFactors=FALSE,comment.char="",nrows=1e6,                  
                  colClasses=c("numeric","integer","numeric",                       
                  "character","numeric","integer"))

Exportar bases de datos

# texto. csv,..
write.table(x, file = "", append = FALSE, quote = TRUE, sep = " ",
            eol = "\n", na = "NA", dec = ".", row.names = TRUE,
            col.names = TRUE,
            fileEncoding = "")

# excel


write.xlsx2(x, file, sheetName = "Sheet1",
  col.names = TRUE, row.names = TRUE, append = FALSE)
  • x <- Objeto a ser escrito.
  • file <- Es la ruta y el nombre del archivo (“../carpeta/archivo.txt”)
  • append <- lógico. Solo relevante si el archivo es una cadena de caracteres. Si es VERDADERO, la salida se añade al archivo. Si es FALSO, cualquier archivo existente del nombre se destruye.
  • quote <- un valor lógico. Si es VERDADERO, cualquier columna de carácter o factor estará rodeada por comillas dobles. Si es un vector numérico, sus elementos se toman como índices de columnas para citar.
  • sep <- Separador
  • eol <- Caracter a imprimir en el fin de cada linea.
  • na <- Como se van a codificar los NAs.
  • row.names <- Nombres de las filas.
  • col.names <- Nombres de las columnas.
  • fileEncoding <- Codificación del archivo.

Recursos

En el siguiente repositorio de github encontrara material para que pratique los tipo de ficheros en R. https://github.com/ydmarinb/Recursos/tree/master/Fichero